# -*- coding: utf-8 -*-
'''
@author Rafael Passos & Ruben Ribeiro
@date: 3 de Dezembro de 2012
@obs: Módulo referente à leitura dos ficheiros CSV's
e criação dos gráficos com os dados dos CSV's.
'''

import csv
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import pylab as p

class Plot1():
	'''
	Classe em que é criado o gráfico a partir dos dados no csv 
	da segunda consulta.
	'''
	def __init__(self, curso):
		'''
		Constructor da classe Plot1.
		@param curso - string que contém o nome de um curso
		'''
		self.curso = curso
		try:
			consulta2 = csv.reader(open("pesquisa2.csv", "rb"))
		except:
			print "Não existem dados!"
		consulta2 = list(consulta2)
		yvalues = []
		for row in consulta2:
			if curso.encode('utf-8') == row[0]:
				for c in range(1, len(row)):
					if len(yvalues) <= 15:
						yvalues.append(float(row[c]))
		
		fig = p.figure()
		ax = fig.add_subplot(1,1,1)
		y = yvalues
		N = len(y)
		ind = range(N)
		plot1 = ax.bar(ind, y, facecolor='#00FFFF',
			   align='center', ecolor='black')
		ax.set_ylabel(u'Alunos Inscritos')
		ax.set_title(curso,fontstyle='italic')
		ax.set_xticks(ind)
		group_labels = ['1995/1996', '1996/1997',
				 '1997/1998', '1998/1999', '1999/2000', '2000/2001', '2001/2002', 
                 '2002/2003', '2003/2004', '2004/2005', '2005/2006',
                 '2006/2007', '2007/2008', '2008/2009', '2009/2010',
                 '2010/2011']
		ax.set_xticklabels(group_labels)
		fig.autofmt_xdate()
		
		def autolabel(plot):
			'''
			Coloca os valores exactos do comprimento da barra,
			a meio desta.
			@param plot - dados das barras.
			'''	
			# attach some text labels
			for rect in plot:
				height = rect.get_height()
				if not height == 0:
					ax.text(rect.get_x()+rect.get_width()/2., 0.5*height, '%d'%int(height),
							ha='center', va='bottom')
		
		autolabel(plot1)
		p.show()

class Plot2():
	'''
	Classe em que é criado o gráfico a partir dos dados no csv 
	da quarta consulta.
	'''
	def __init__(self, nivel_formacao):
		'''
		Constructor da classe Plot2.
		@param nivel_formacao - string que contem um nome de um nível de formação
		'''
		self.nivel_formacao = nivel_formacao
		consulta4 = csv.reader(open("pesquisa4.csv", "rb"))
		consulta4 = list(consulta4)
		yvalues = []
		for row in consulta4:
			if nivel_formacao.encode('utf-8') == row[0]:
				for c in range(1, len(row)):
					yvalues.append(float(row[c]))
		
		fig = p.figure()
		ax = fig.add_subplot(1,1,1)
		y = yvalues
		N = len(y)
		ind = range(N)
		plot2 = ax.bar(ind, y, facecolor='#00FFFF',
			   align='center', ecolor='black')
		ax.set_ylabel(u'Alunos Inscritos')
		ax.set_title(nivel_formacao,fontstyle='italic')
		ax.set_xticks(ind)
		group_labels = ['1995/1996', '1996/1997',
				 '1997/1998', '1998/1999', '1999/2000', '2000/2001', '2001/2002', 
                 '2002/2003', '2003/2004', '2004/2005', '2005/2006',
                 '2006/2007', '2007/2008', '2008/2009', '2009/2010',
                 '2010/2011']
		ax.set_xticklabels(group_labels)
		fig.autofmt_xdate()
		
		def autolabel(plot):
			'''
			Coloca os valores exactos do comprimento da barra,
			a meio desta.
			@param plot - dados das barras.
			'''		
			# attach some text labels
			for rect in plot:
				height = rect.get_height()
				if not height == 0:
					ax.text(rect.get_x()+rect.get_width()/2., 0.5*height, '%d'%int(height),
							ha='center', va='bottom')
		
		autolabel(plot2)
		p.grid()
		p.show()
